package main

import "fmt"

// 特点 - 查找速度快, 他的底层 基于哈希表存储 - 键不可重复 - 键必须可哈希 - 无序
// 第一步 ，先计算键值的哈希值， 第二部， 根据哈希值取模，确定存储的位置
// 如果取模后的值相同，通过拉链法，将值存储在以后位置的后面

// 声明和初始化
func K1() {
	var map1 = map[int]string{1: "myc", 2: "djr"}
	map1[3] = "hhh"
	map1[1] = "DJR"
	fmt.Println(map1)
}

// 基于make创建, 并初始化10个位置
func K2() {
	var map2 = make(map[int]string, 1)
	map2[0] = "xixihaha"
	map2[1] = "dwg"
	map2[2] = "zzy"
	fmt.Println(map2, len(map2))
}

// 通过new创建,指针类型的map
func K3() {
	var resourceMap = map[int]string{1: "name"}
	// 用于整体赋值， 不可单独添加数据
	var map1 = new(map[int]string)
	// map1[1] = "name"
	// map1是一个指针，存储的内存地址， 所以赋值也需要将resourceMap转换为内存地址
	map1 = &resourceMap
	fmt.Println(*map1)
}

// 创建一个key为数组类型的map
func K5() {
	var map1 = make(map[[2]string]bool)
	map1[[2]string{"myc", "djr"}] = true
	fmt.Println(map1)
}
